/**
* @file timer.h
* @brief 计时器
*/
#ifndef TIANYU_COMMON_TIMER_H_
#define TIANYU_COMMON_TIMER_H_

#include <stdint.h>
//#include "base.h"
#include "list_link.h"
#include "retcodes.h"

namespace common
{
	/**
	* @brief timer基类
	*/
	class ITimer
	{
	public:

		/**
		* @brief 构造函数
		*/
		ITimer();

		ITimer(const ITimer& rhs);

		/**
		* @brief 析构函数
		*/
		virtual ~ITimer();

		/**
		* @brief timer激活
		*/
		virtual void Active() = 0;

		/**
		* @brief 获取激活时间
		*
		* @return 激活时间
		*/
		int64_t activetime() const { return active_time_; }

		CListLink< ITimer >& list_link() { return list_link_; }

	protected:

		/**
		* @brief 启动timer
		*/
		int RealStart();

		/**
		* @brief 关闭timer
		*/
		int RealStop();

		int64_t active_time_; //激活时间

	private:
		CListLink< ITimer > list_link_;
	};

	/**
	* @brief 循环timer;
	*/
	class CTimer : public ITimer
	{
	public:

		/**
		* @brief 构造函数
		*/
		CTimer();

		/**
		* @brief 析构函数
		*/
		virtual ~CTimer();

		/**
		* @brief 开启timer
		*
		* @param delta_time 间隔时间
		* @param loop_times 循环次数
		*/
		int32_t TimerInit(int64_t delta_time);

		/**
		* @brief 关闭计时器
		*/
		int32_t TimerStop();

		int32_t TimerStart();

		/**
		* @brief timer被激活的处理
		*/
		virtual void Active();

		virtual void TimerActive() = 0;

	protected:
		int64_t delta_time_;/**<间隔时间  */
	};
}

#endif
